[BeagleBone Black] Enable All UART Ports at Boot

Previously we used enable the UART ports by hand, but that’s annoying because it required doing it manually every time the BBB boot. In addition, writing a script wouldn’t work for some reason. For my quadcopter project, the BBB must enable all UART ports by itself at boot, since I can’t fly with a wire hooked onto it. Therefore, I went on and do some digging on this… took a while before anything came up. It’s actually more complicated than I though, having to deal with how device tree works and all… but here’s what I found:

The Easy Method (Only Work for UART1, UART2, UART4, UART5)

First, we want to check out what device trees are available for us to use…

// Navigation to the Device Tree File Directory
cd /lib/firmware/
ls

Okay, there’s lots of files there, but what really matter to us are the UART files:

BB-UART1-00A0.dtbo
BB-UART2-00A0.dtbo
BB-UART4-00A0.dtbo
BB-UART5-00A0.dtbo

As we can see, UART3, like always is not available… that’s because its RX pin is tied to HDMI. UART5 is also conflicting with the LCD cape, or so I heard from elsewhere…

Anyway, these are the device tree files that we actually used to activate manually. So now, we will need to edit the boot file uEnv.txt to automatically activate those files. Note, armhf’s files, unfortunately don’t work here, so we can’t use this method to enable UART3. We could have use Adafruit’s library to write a python script to setup the UART and launch it at boot with Cron. But Adafruit don’t support UART3 and UART4… that’s why we have the longer method later on…

\\ Change to Boot Directory and Edit uEnv.txt (note, we are using Debian here...)
cd /boot/uboot/
sudo nano uEnv.txt

Add the following line after all the cape stuffs:

optargs=capemgr.enable_partno=BB-UART1,BB-UART2,BB-UART3,BB-UART5

Save the file with Ctrl+X, YEnter, and then sudo reboot, and we should be set.

The Longer Method (Work for All UART Ports)

According to armhf’s comments, the proper way of enabling the UARTs at boot is to modify the default device tree file – am335x-boneblack.dtb, which for Debian, is located at /boot/uboot/dtbs/.

First step, we need to make a backup of the file so in case we screw up, we can revert back:

// Change to the Device Tree Boot Directory (btw, look up tap completion for some shortcut)
cd /boot/uboot/dtbs/

// Copy the File to a Backup File
sudo cp am335x-boneblack.dtb am335x-boneblack.dtb_backup

Okay, now we need to decompile the file so we can edit it (you might need to install the device-tree-compiler but it should be defaultly installed with the debian image):

// Decompile Default Device Tree File to Home Folder
sudo dtc -I dtb -O dts -o am335x-boneblack.dts /home/debian/am335x-boneblack.dtb

// Change Directory to Home Folder
cd ~

// Modify File
nano am335x-boneblack.dtb

Alright, now we start the hard part of modifying the file… I transfer that file to my PC edit it, then transfer back, it’s much easier than editing in the terminal. But your choice.

Look for pinmux@44e10800 and then after the pinmux_rstctl_pins section, add the following for UART1:

pinmux_serial1_pins {
    pinctrl-single,pins = <0x180 0x20 0x184 0x0>;
    linux,phandle = <0x81>;
    phandle = <0x81>;
};

The values in pinctrl-single,pins are representing the RX and TX pins as found in armhf’s page:

UART1: 0x4802_2000 (/dev/ttyO1)
   TX: 0x184 0x00  (p9-24) (ZCZ-D15 UART1_TXD mode:0 [datasheet]) = (conf_uart1_txd 984h [TRM p1126] = 0x0184)
   RX: 0x180 0x20  (p9-26) (ZCZ-D16 UART1_RXD mode:0 [datasheet]) = (conf_uart1_rxd 980h [TRM p1126] = 0x0180)

The value 0x81 is like a reference address that could be anything that not used somewhere else. So for me, I used 0x81 for UART1, 0x82 for UART2… okay, so repeat the step above for all the UART ports you want to enable. For UART3, it’s a bit different in that you only have to supply the TX pin addresses since its RX pin is used somewhere else. For enabling all UART ports, here’s what you should have in that section:

pinmux_serial1_pins {
			pinctrl-single,pins = <0x180 0x20 0x184 0x0>;
			linux,phandle = <0x81>;
			phandle = <0x81>;
		};

		pinmux_serial2_pins {
			pinctrl-single,pins = <0x150 0x21 0x154 0x01>;
			linux,phandle = <0x82>;
			phandle = <0x82>;
		};
		
		pinmux_serial3_pins {
			pinctrl-single,pins = <0x164 0x01>;
			linux,phandle = <0x83>;
			phandle = <0x83>;
		};
		
		pinmux_serial4_pins {
			pinctrl-single,pins = <0x070 0x26 0x074 0x06>;
			linux,phandle = <0x84>;
			phandle = <0x84>;
		};
		
		pinmux_serial5_pins {
			pinctrl-single,pins = <0x0C4 0x24 0x0C0 0x04>;
			linux,phandle = <0x85>;
			phandle = <0x85>;
		};

Alright, so that part is good, which only defined the pin address, we now need to actually activate them. So now, scroll down and look for the serial@44e09000 UART1 section. NOTE, there are inconsistency here, UART1 will actually display as UART2. Who know, maybe the chip is 1 indexed instead of 0 indexed. Anyway, UART1 should be something like this:

		serial@48022000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart2";
			clock-frequency = <0x2dc6c00>;
			reg = <0x48022000 0x2000>;
			interrupts = <0x49>;
			status = "disabled";
			linux,phandle = <0x19>;
			phandle = <0x19>;
		};

So now, we want to replace the status = “disabled”; line with several other commands, it should look like this in the end:

		serial@48022000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart2";
			clock-frequency = <0x2dc6c00>;
			reg = <0x48022000 0x2000>;
			interrupts = <0x49>;
			pinctrl-names = "default";
			pinctrl-0 = <0x81>;
			status = "okay";
			linux,phandle = <0x19>;
			phandle = <0x19>;
		};

Hence, the entire section here should look like this for activating all ports (UART0 or UART1 in the file is activated by default, so we only do 1 to 5 or 2 to 6, depends on how you look at it):

                serial@48022000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart2";
			clock-frequency = <0x2dc6c00>;
			reg = <0x48022000 0x2000>;
			interrupts = <0x49>;
			pinctrl-names = "default";
			pinctrl-0 = <0x81>;
			status = "okay";
			linux,phandle = <0x19>;
			phandle = <0x19>;
		};

		serial@48024000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart3";
			clock-frequency = <0x2dc6c00>;
			reg = <0x48024000 0x2000>;
			interrupts = <0x4a>;
			pinctrl-names = "default";
			pinctrl-0 = <0x82>;
			status = "okay";
			linux,phandle = <0x1a>;
			phandle = <0x1a>;
		};

		serial@481a6000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart4";
			clock-frequency = <0x2dc6c00>;
			reg = <0x481a6000 0x2000>;
			interrupts = <0x2c>;
			pinctrl-names = "default";
			pinctrl-0 = <0x83>;
			status = "okay";
			linux,phandle = <0x1b>;
			phandle = <0x1b>;
		};

		serial@481a8000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart5";
			clock-frequency = <0x2dc6c00>;
			reg = <0x481a8000 0x2000>;
			interrupts = <0x2d>;
		    pinctrl-names = "default";
			pinctrl-0 = <0x84>;
			status = "okay";
			linux,phandle = <0x1c>;
			phandle = <0x1c>;
		};

		serial@481aa000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart6";
			clock-frequency = <0x2dc6c00>;
			reg = <0x481aa000 0x2000>;
			interrupts = <0x2e>;
			pinctrl-names = "default";
			pinctrl-0 = <0x85>;
			status = "okay";
			linux,phandle = <0x1d>;
			phandle = <0x1d>;
		};

Almost, there, save and quit the file with Ctrl+XYEnter. Then we need to compile the file and copy it back into the boot directory, restart.

// Compile the File
sudo dtc -I dts -O dtb -o am335x-boneblack.dtb am335x-boneblack.dts

// Copy File to Boot
sudo cp am335x-boneblack.dtb /boot/uboot/dtbs

// Restart 
sudo restart

When the BBB boot up again, double check all the ports are enabled with this:

// Display tty ports
dmesg | grep tty

If they are there, awesome! If not, well… double check what’s wrong. Maybe use the codes at the end of this post that include the entire device tree code.

Okay, to test the ports actually work, you can use this Python code I wrote up real quick. Use the Arduino software library example on the PC’s end to test. Here’s the UART ports diagram from eLinux.

# Yu Hin Hau
# Serial Port Tester for BeagleBone Black
# 10/13/2014

import serial
import time

s1 = serial.Serial('/dev/ttyO1',9600, timeout = 0.1)
s2 = serial.Serial('/dev/ttyO2',9600, timeout = 0.1)
s3 = serial.Serial('/dev/ttyO3',9600, timeout = 0.1)
s4 = serial.Serial('/dev/ttyO4',9600, timeout = 0.1)
s5 = serial.Serial('/dev/ttyO5',9600, timeout = 0.1)

while 1:
	s1.write('This is UART1!\n')
	s2.write('This is UART2!\n')
	s3.write('This is UART3!\n')
	s4.write('This is UART4!\n')
	s5.write('This is UART5!\n')

	print 'UART1: ', s1.readline()
	print 'UART2: ', s2.readline()
	print 'UART3: ', s3.readline()
	print 'UART4: ', s4.readline()
	print 'UART5: ', s5.readline()

	print '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
	time.sleep(0.5)

Modified Device Tree File Codes

Alright, here’s the entire code to that device tree file that enable all UART ports if doing it yourself don’t work… just a warning, it’s insanely long…

/dts-v1/;

/ {
	#address-cells = <0x1>;
	#size-cells = <0x1>;
	compatible = "ti,am335x-bone", "ti,am33xx";
	interrupt-parent = <0x1>;
	model = "TI AM335x BeagleBone";

	chosen {
	};

	aliases {
		serial0 = "/ocp/serial@44e09000";
		serial1 = "/ocp/serial@48022000";
		serial2 = "/ocp/serial@48024000";
		serial3 = "/ocp/serial@481a6000";
		serial4 = "/ocp/serial@481a8000";
		serial5 = "/ocp/serial@481aa000";
	};

	memory {
		device_type = "memory";
		reg = <0x80000000 0x10000000>;
	};

	cpus {

		cpu@0 {
			compatible = "arm,cortex-a8";
			operating-points = <0xf4240 0x149970 0xc3500 0x13d620 0x927c0 0x10f7c0 0x493e0 0xec928>;
			voltage-tolerance = <0x2>;
			clock-latency = <0x493e0>;
			cpu0-supply = <0x2>;
			linux,phandle = <0x13>;
			phandle = <0x13>;
		};
	};

	pmu {
		compatible = "arm,cortex-a8-pmu";
		interrupts = <0x3>;
	};

	soc {
		compatible = "ti,omap-infra";

		mpu {
			compatible = "ti,omap3-mpu";
			ti,hwmods = "mpu";
		};
	};

	pinmux@44e10800 {
		compatible = "pinctrl-single";
		reg = <0x44e10800 0x238>;
		#address-cells = <0x1>;
		#size-cells = <0x0>;
		pinctrl-single,register-width = <0x20>;
		pinctrl-single,function-mask = <0x7f>;
		pinctrl-names = "default";
		pinctrl-0 = <0x3>;
		linux,phandle = <0x14>;
		phandle = <0x14>;

		pinmux_userled_pins {
			pinctrl-single,pins = <0x54 0x7 0x58 0x17 0x5c 0x7 0x60 0x17>;
			linux,phandle = <0x3>;
			phandle = <0x3>;
		};

		pinmux_i2c0_pins {
			pinctrl-single,pins = <0x188 0x70 0x18c 0x70>;
			linux,phandle = <0x6>;
			phandle = <0x6>;
		};

		pinmux_i2c2_pins {
			pinctrl-single,pins = <0x178 0x73 0x17c 0x73>;
			linux,phandle = <0x7>;
			phandle = <0x7>;
		};

		pinmux_mmc1_pins {
			pinctrl-single,pins = <0x160 0x2f>;
			linux,phandle = <0x9>;
			phandle = <0x9>;
		};

		pinmux_rstctl_pins {
			pinctrl-single,pins = <0x50 0x17>;
			linux,phandle = <0x4>;
			phandle = <0x4>;
		};
		
		pinmux_serial1_pins {
			pinctrl-single,pins = <0x180 0x20 0x184 0x0>;
			linux,phandle = <0x81>;
			phandle = <0x81>;
		};

		pinmux_serial2_pins {
			pinctrl-single,pins = <0x150 0x21 0x154 0x01>;
			linux,phandle = <0x82>;
			phandle = <0x82>;
		};
		
		pinmux_serial3_pins {
			pinctrl-single,pins = <0x164 0x01>;
			linux,phandle = <0x83>;
			phandle = <0x83>;
		};
		
		pinmux_serial4_pins {
			pinctrl-single,pins = <0x070 0x26 0x074 0x06>;
			linux,phandle = <0x84>;
			phandle = <0x84>;
		};
		
		pinmux_serial5_pins {
			pinctrl-single,pins = <0x0C4 0x24 0x0C0 0x04>;
			linux,phandle = <0x85>;
			phandle = <0x85>;
		};
			
	};

	ocp {
		compatible = "simple-bus";
		#address-cells = <0x1>;
		#size-cells = <0x1>;
		ranges;
		ti,hwmods = "l3_main";
		linux,phandle = <0x15>;
		phandle = <0x15>;

		interrupt-controller@48200000 {
			compatible = "ti,omap2-intc";
			interrupt-controller;
			#interrupt-cells = <0x1>;
			ti,intc-size = <0x80>;
			reg = <0x48200000 0x1000>;
			linux,phandle = <0x1>;
			phandle = <0x1>;
		};

		sgx@0x56000000 {
			compatible = "ti,sgx";
			ti,hwmods = "gfx";
			clock-frequency = <0xbebc200>;
			reg = <0x56000000 0x1000000>;
			interrupts = <0x25>;
		};

		edma@49000000 {
			compatible = "ti,edma3";
			ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2";
			reg = <0x49000000 0x10000 0x44e10f90 0x40>;
			interrupt-parent = <0x1>;
			interrupts = <0xc 0xd 0xe>;
			#dma-cells = <0x1>;
			dma-channels = <0x40>;
			ti,edma-regions = <0x4>;
			ti,edma-slots = <0x100>;
			ti,edma-queue-tc-map = <0x0 0x0 0x1 0x1 0x2 0x2>;
			ti,edma-queue-priority-map = <0x0 0x0 0x1 0x1 0x2 0x2>;
			ti,edma-default-queue = <0x1>;
			ti,edma-xbar-event-map = <0x20 0xc 0x1e 0x14>;
			linux,phandle = <0x8>;
			phandle = <0x8>;
		};

		gpio@44e07000 {
			compatible = "ti,omap4-gpio";
			ti,hwmods = "gpio1";
			gpio-controller;
			#gpio-cells = <0x2>;
			interrupt-controller;
			#interrupt-cells = <0x1>;
			reg = <0x44e07000 0x1000>;
			interrupts = <0x60>;
			linux,phandle = <0xa>;
			phandle = <0xa>;
		};

		gpio@4804c000 {
			compatible = "ti,omap4-gpio";
			ti,hwmods = "gpio2";
			gpio-controller;
			#gpio-cells = <0x2>;
			interrupt-controller;
			#interrupt-cells = <0x1>;
			reg = <0x4804c000 0x1000>;
			interrupts = <0x62>;
			linux,phandle = <0x5>;
			phandle = <0x5>;
		};

		gpio@481ac000 {
			compatible = "ti,omap4-gpio";
			ti,hwmods = "gpio3";
			gpio-controller;
			#gpio-cells = <0x2>;
			interrupt-controller;
			#interrupt-cells = <0x1>;
			reg = <0x481ac000 0x1000>;
			interrupts = <0x20>;
			linux,phandle = <0x16>;
			phandle = <0x16>;
		};

		gpio@481ae000 {
			compatible = "ti,omap4-gpio";
			ti,hwmods = "gpio4";
			gpio-controller;
			#gpio-cells = <0x2>;
			interrupt-controller;
			#interrupt-cells = <0x1>;
			reg = <0x481ae000 0x1000>;
			interrupts = <0x3e>;
			linux,phandle = <0x17>;
			phandle = <0x17>;
		};

		rstctl@0 {
			status = "okay";
			compatible = "gpio-rctrl";
			pinctrl-names = "default";
			pinctrl-0 = <0x4>;
			#reset-cells = <0x2>;
			gpios = <0x5 0x14 0x0>;
			gpio-names = "eMMC_RSTn";
			linux,phandle = <0xc>;
			phandle = <0xc>;
		};

		serial@44e09000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart1";
			clock-frequency = <0x2dc6c00>;
			reg = <0x44e09000 0x2000>;
			interrupts = <0x48>;
			status = "okay";
			linux,phandle = <0x18>;
			phandle = <0x18>;
		};

		serial@48022000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart2";
			clock-frequency = <0x2dc6c00>;
			reg = <0x48022000 0x2000>;
			interrupts = <0x49>;
			pinctrl-names = "default";
			pinctrl-0 = <0x81>;
			status = "okay";
			linux,phandle = <0x19>;
			phandle = <0x19>;
		};

		serial@48024000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart3";
			clock-frequency = <0x2dc6c00>;
			reg = <0x48024000 0x2000>;
			interrupts = <0x4a>;
			pinctrl-names = "default";
			pinctrl-0 = <0x82>;
			status = "okay";
			linux,phandle = <0x1a>;
			phandle = <0x1a>;
		};

		serial@481a6000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart4";
			clock-frequency = <0x2dc6c00>;
			reg = <0x481a6000 0x2000>;
			interrupts = <0x2c>;
			pinctrl-names = "default";
			pinctrl-0 = <0x83>;
			status = "okay";
			linux,phandle = <0x1b>;
			phandle = <0x1b>;
		};

		serial@481a8000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart5";
			clock-frequency = <0x2dc6c00>;
			reg = <0x481a8000 0x2000>;
			interrupts = <0x2d>;
		    pinctrl-names = "default";
			pinctrl-0 = <0x84>;
			status = "okay";
			linux,phandle = <0x1c>;
			phandle = <0x1c>;
		};

		serial@481aa000 {
			compatible = "ti,omap3-uart";
			ti,hwmods = "uart6";
			clock-frequency = <0x2dc6c00>;
			reg = <0x481aa000 0x2000>;
			interrupts = <0x2e>;
			pinctrl-names = "default";
			pinctrl-0 = <0x85>;
			status = "okay";
			linux,phandle = <0x1d>;
			phandle = <0x1d>;
		};

		i2c@44e0b000 {
			compatible = "ti,omap4-i2c";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			ti,hwmods = "i2c1";
			reg = <0x44e0b000 0x1000>;
			interrupts = <0x46>;
			status = "okay";
			clock-frequency = <0x61a80>;
			pinctrl-names = "default";
			pinctrl-0 = <0x6>;
			linux,phandle = <0x1e>;
			phandle = <0x1e>;

			tps@24 {
				reg = <0x24>;
				compatible = "ti,tps65217";
				ti,pmic-shutdown-controller;
				interrupt-parent = <0x1>;
				interrupts = <0x7>;
				linux,phandle = <0x1f>;
				phandle = <0x1f>;

				regulators {
					#address-cells = <0x1>;
					#size-cells = <0x0>;

					regulator@0 {
						reg = <0x0>;
						regulator-compatible = "dcdc1";
						regulator-always-on;
						linux,phandle = <0x20>;
						phandle = <0x20>;
					};

					regulator@1 {
						reg = <0x1>;
						regulator-compatible = "dcdc2";
						regulator-name = "vdd_mpu";
						regulator-min-microvolt = <0xe1d48>;
						regulator-max-microvolt = <0x1437c8>;
						regulator-boot-on;
						regulator-always-on;
						linux,phandle = <0x2>;
						phandle = <0x2>;
					};

					regulator@2 {
						reg = <0x2>;
						regulator-compatible = "dcdc3";
						regulator-name = "vdd_core";
						regulator-min-microvolt = <0xe1d48>;
						regulator-max-microvolt = <0x118c30>;
						regulator-boot-on;
						regulator-always-on;
						linux,phandle = <0x21>;
						phandle = <0x21>;
					};

					regulator@3 {
						reg = <0x3>;
						regulator-compatible = "ldo1";
						regulator-always-on;
						linux,phandle = <0x22>;
						phandle = <0x22>;
					};

					regulator@4 {
						reg = <0x4>;
						regulator-compatible = "ldo2";
						regulator-always-on;
						linux,phandle = <0x23>;
						phandle = <0x23>;
					};

					regulator@5 {
						reg = <0x5>;
						regulator-compatible = "ldo3";
						regulator-min-microvolt = <0x1b7740>;
						regulator-max-microvolt = <0x1b7740>;
						regulator-always-on;
						linux,phandle = <0x24>;
						phandle = <0x24>;
					};

					regulator@6 {
						reg = <0x6>;
						regulator-compatible = "ldo4";
						regulator-always-on;
						linux,phandle = <0x25>;
						phandle = <0x25>;
					};
				};
			};

			baseboard_eeprom@50 {
				compatible = "at,24c256";
				reg = <0x50>;
				linux,phandle = <0xe>;
				phandle = <0xe>;
			};
		};

		i2c@4802a000 {
			compatible = "ti,omap4-i2c";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			ti,hwmods = "i2c2";
			reg = <0x4802a000 0x1000>;
			interrupts = <0x47>;
			status = "disabled";
			linux,phandle = <0x26>;
			phandle = <0x26>;
		};

		i2c@4819c000 {
			compatible = "ti,omap4-i2c";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			ti,hwmods = "i2c3";
			reg = <0x4819c000 0x1000>;
			interrupts = <0x1e>;
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x7>;
			clock-frequency = <0x186a0>;
			linux,phandle = <0x27>;
			phandle = <0x27>;

			cape_eeprom0@54 {
				compatible = "at,24c256";
				reg = <0x54>;
				linux,phandle = <0xf>;
				phandle = <0xf>;
			};

			cape_eeprom1@55 {
				compatible = "at,24c256";
				reg = <0x55>;
				linux,phandle = <0x10>;
				phandle = <0x10>;
			};

			cape_eeprom2@56 {
				compatible = "at,24c256";
				reg = <0x56>;
				linux,phandle = <0x11>;
				phandle = <0x11>;
			};

			cape_eeprom3@57 {
				compatible = "at,24c256";
				reg = <0x57>;
				linux,phandle = <0x12>;
				phandle = <0x12>;
			};
		};

		mmc@48060000 {
			compatible = "ti,omap3-hsmmc";
			ti,hwmods = "mmc1";
			ti,dual-volt;
			ti,needs-special-reset;
			ti,needs-special-hs-handling;
			dmas = <0x8 0x18 0x8 0x19>;
			dma-names = "tx", "rx";
			status = "okay";
			pinctrl-names = "default";
			pinctrl-0 = <0x9>;
			bus-width = <0x4>;
			cd-gpios = <0xa 0x6 0x0>;
			cd-inverted;
			vmmc-supply = <0xb>;
			ti,vcc-aux-disable-is-sleep;
			linux,phandle = <0x28>;
			phandle = <0x28>;
		};

		mmc@481d8000 {
			compatible = "ti,omap3-hsmmc";
			ti,hwmods = "mmc2";
			ti,needs-special-reset;
			ti,needs-special-hs-handling;
			dmas = <0x8 0x2 0x8 0x3>;
			dma-names = "tx", "rx";
			status = "disabled";
			vmmc-supply = <0xb>;
			bus-width = <0x8>;
			ti,non-removable;
			reset = <0xc 0x0 0x0>;
			reset-names = "eMMC_RSTn-CONSUMER";
			linux,phandle = <0x29>;
			phandle = <0x29>;
		};

		mmc@47810000 {
			compatible = "ti,omap3-hsmmc";
			ti,hwmods = "mmc3";
			ti,needs-special-reset;
			ti,needs-special-hs-handling;
			status = "disabled";
			linux,phandle = <0x2a>;
			phandle = <0x2a>;
		};

		wdt@44e35000 {
			compatible = "ti,omap3-wdt";
			ti,hwmods = "wd_timer2";
			reg = <0x44e35000 0x1000>;
			interrupts = <0x5b>;
			linux,phandle = <0x2b>;
			phandle = <0x2b>;
		};

		d_can@481cc000 {
			compatible = "bosch,d_can";
			ti,hwmods = "d_can0";
			reg = <0x481cc000 0x2000>;
			interrupts = <0x34>;
			status = "disabled";
			linux,phandle = <0x2c>;
			phandle = <0x2c>;
		};

		d_can@481d0000 {
			compatible = "bosch,d_can";
			ti,hwmods = "d_can1";
			reg = <0x481d0000 0x2000>;
			interrupts = <0x37>;
			status = "disabled";
			linux,phandle = <0x2d>;
			phandle = <0x2d>;
		};

		timer@44e31000 {
			compatible = "ti,omap2-timer";
			reg = <0x44e31000 0x400>;
			interrupts = <0x43>;
			ti,hwmods = "timer1";
			ti,timer-alwon;
			linux,phandle = <0x2e>;
			phandle = <0x2e>;
		};

		timer@48040000 {
			compatible = "ti,omap2-timer";
			reg = <0x48040000 0x400>;
			interrupts = <0x44>;
			ti,hwmods = "timer2";
			linux,phandle = <0x2f>;
			phandle = <0x2f>;
		};

		timer@48042000 {
			compatible = "ti,omap2-timer";
			reg = <0x48042000 0x400>;
			interrupts = <0x45>;
			ti,hwmods = "timer3";
			linux,phandle = <0x30>;
			phandle = <0x30>;
		};

		timer@48044000 {
			compatible = "ti,omap2-timer";
			reg = <0x48044000 0x400>;
			interrupts = <0x5c>;
			ti,hwmods = "timer4";
			ti,timer-pwm;
			linux,phandle = <0x31>;
			phandle = <0x31>;
		};

		timer@48046000 {
			compatible = "ti,omap2-timer";
			reg = <0x48046000 0x400>;
			interrupts = <0x5d>;
			ti,hwmods = "timer5";
			ti,timer-pwm;
			linux,phandle = <0x32>;
			phandle = <0x32>;
		};

		timer@48048000 {
			compatible = "ti,omap2-timer";
			reg = <0x48048000 0x400>;
			interrupts = <0x5e>;
			ti,hwmods = "timer6";
			ti,timer-pwm;
			linux,phandle = <0x33>;
			phandle = <0x33>;
		};

		timer@4804a000 {
			compatible = "ti,omap2-timer";
			reg = <0x4804a000 0x400>;
			interrupts = <0x5f>;
			ti,hwmods = "timer7";
			ti,timer-pwm;
			linux,phandle = <0x34>;
			phandle = <0x34>;
		};

		pruss@4a300000 {
			compatible = "ti,pruss-v2";
			ti,hwmods = "pruss";
			ti,deassert-hard-reset = "pruss", "pruss";
			reg = <0x4a300000 0x80000>;
			ti,pintc-offset = <0x20000>;
			interrupt-parent = <0x1>;
			status = "disabled";
			interrupts = <0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>;
			linux,phandle = <0x35>;
			phandle = <0x35>;
		};

		rtc@44e3e000 {
			compatible = "ti,da830-rtc";
			reg = <0x44e3e000 0x1000>;
			interrupts = <0x4b 0x4c>;
			ti,hwmods = "rtc";
			ti,system-power-controller;
		};

		spi@48030000 {
			compatible = "ti,omap4-mcspi";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			reg = <0x48030000 0x400>;
			interrupt = <0x41>;
			ti,spi-num-cs = <0x2>;
			ti,hwmods = "spi0";
			dmas = <0x8 0x10 0x8 0x11 0x8 0x12 0x8 0x13>;
			dma-names = "tx0", "rx0", "tx1", "rx1";
			status = "disabled";
			linux,phandle = <0x36>;
			phandle = <0x36>;
		};

		spi@481a0000 {
			compatible = "ti,omap4-mcspi";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			reg = <0x481a0000 0x400>;
			interrupt = <0x7d>;
			ti,spi-num-cs = <0x2>;
			ti,hwmods = "spi1";
			dmas = <0x8 0x2a 0x8 0x2b 0x8 0x2c 0x8 0x2d>;
			dma-names = "tx0", "rx0", "tx1", "rx1";
			status = "disabled";
			linux,phandle = <0x37>;
			phandle = <0x37>;
		};

		gpmc@50000000 {
			compatible = "ti,am3352-gpmc";
			ti,hwmods = "gpmc";
			reg = <0x50000000 0x1000000>;
			interrupts = <0x64>;
			gpmc,num-cs = <0x7>;
			gpmc,num-waitpins = <0x2>;
			#address-cells = <0x2>;
			#size-cells = <0x1>;
			status = "disabled";
			linux,phandle = <0x38>;
			phandle = <0x38>;
		};

		nop-phy@0 {
			compatible = "nop-xceiv-usb";
		};

		nop-phy@1 {
			compatible = "nop-xceiv-usb";
		};

		usb@47400000 {
			compatible = "ti,musb-am33xx";
			reg = <0x47400000 0x1000 0x47401000 0x800 0x47401800 0x800>;
			interrupts = <0x11 0x12 0x13>;
			multipoint = <0x1>;
			num-eps = <0x10>;
			ram-bits = <0xc>;
			port0-mode = <0x3>;
			port1-mode = <0x1>;
			power = <0xfa>;
			ti,hwmods = "usb_otg_hs";
			status = "okay";
			interface_type = <0x1>;
			linux,phandle = <0x39>;
			phandle = <0x39>;
		};

		ethernet@4a100000 {
			compatible = "ti,cpsw";
			ti,hwmods = "cpgmac0";
			cpdma_channels = <0x8>;
			ale_entries = <0x400>;
			bd_ram_size = <0x2000>;
			no_bd_ram = <0x0>;
			rx_descs = <0x40>;
			mac_control = <0x20>;
			slaves = <0x2>;
			cpts_active_slave = <0x0>;
			cpts_clock_mult = <0x80000000>;
			cpts_clock_shift = <0x1d>;
			reg = <0x4a100000 0x800 0x4a101200 0x100>;
			#address-cells = <0x1>;
			#size-cells = <0x1>;
			interrupt-parent = <0x1>;
			interrupts = <0x28 0x29 0x2a 0x2b>;
			ranges;
			disable-napi;
			linux,phandle = <0x3a>;
			phandle = <0x3a>;

			mdio@4a101000 {
				compatible = "ti,davinci_mdio";
				#address-cells = <0x1>;
				#size-cells = <0x0>;
				ti,hwmods = "davinci_mdio";
				bus_freq = <0xf4240>;
				reg = <0x4a101000 0x100>;
				linux,phandle = <0xd>;
				phandle = <0xd>;
			};

			slave@4a100200 {
				mac-address = [00 00 00 00 00 00];
				phy_id = <0xd 0x0>;
				linux,phandle = <0x3b>;
				phandle = <0x3b>;
			};

			slave@4a100300 {
				mac-address = [00 00 00 00 00 00];
				phy_id = <0xd 0x1>;
				linux,phandle = <0x3c>;
				phandle = <0x3c>;
			};
		};

		tscadc@44e0d000 {
			compatible = "ti,ti-tscadc";
			reg = <0x44e0d000 0x1000>;
			interrupt-parent = <0x1>;
			interrupts = <0x10>;
			ti,hwmods = "adc_tsc";
			status = "disabled";
			linux,phandle = <0x3d>;
			phandle = <0x3d>;
		};

		lcdc@4830e000 {
			compatible = "ti,am3352-lcdc", "ti,da830-lcdc";
			reg = <0x4830e000 0x1000>;
			interrupts = <0x24>;
			status = "disabled";
			ti,hwmods = "lcdc";
			linux,phandle = <0x3e>;
			phandle = <0x3e>;
		};

		epwmss@48300000 {
			compatible = "ti,am33xx-pwmss";
			reg = <0x48300000 0x10>;
			ti,hwmods = "epwmss0";
			#address-cells = <0x1>;
			#size-cells = <0x1>;
			status = "disabled";
			ranges = <0x48300100 0x48300100 0x80 0x48300180 0x48300180 0x80 0x48300200 0x48300200 0x80>;
			linux,phandle = <0x3f>;
			phandle = <0x3f>;

			ecap@48300100 {
				compatible = "ti,am33xx-ecap";
				#pwm-cells = <0x3>;
				reg = <0x48300100 0x80>;
				ti,hwmods = "ecap0";
				status = "disabled";
				linux,phandle = <0x40>;
				phandle = <0x40>;
			};

			ehrpwm@48300200 {
				compatible = "ti,am33xx-ehrpwm";
				#pwm-cells = <0x3>;
				reg = <0x48300200 0x80>;
				ti,hwmods = "ehrpwm0";
				status = "disabled";
				linux,phandle = <0x41>;
				phandle = <0x41>;
			};

			eqep@0x48300180 {
				compatible = "ti,am33xx-eqep";
				reg = <0x48300180 0x80>;
				interrupt-parent = <0x1>;
				interrupts = <0x4f>;
				ti,hwmods = "eqep0";
				status = "disabled";
				linux,phandle = <0x42>;
				phandle = <0x42>;
			};
		};

		epwmss@48302000 {
			compatible = "ti,am33xx-pwmss";
			reg = <0x48302000 0x10>;
			ti,hwmods = "epwmss1";
			#address-cells = <0x1>;
			#size-cells = <0x1>;
			status = "disabled";
			ranges = <0x48302100 0x48302100 0x80 0x48302180 0x48302180 0x80 0x48302200 0x48302200 0x80>;
			linux,phandle = <0x43>;
			phandle = <0x43>;

			ecap@48302100 {
				compatible = "ti,am33xx-ecap";
				#pwm-cells = <0x3>;
				reg = <0x48302100 0x80>;
				ti,hwmods = "ecap1";
				status = "disabled";
				linux,phandle = <0x44>;
				phandle = <0x44>;
			};

			ehrpwm@48302200 {
				compatible = "ti,am33xx-ehrpwm";
				#pwm-cells = <0x3>;
				reg = <0x48302200 0x80>;
				ti,hwmods = "ehrpwm1";
				status = "disabled";
				linux,phandle = <0x45>;
				phandle = <0x45>;
			};

			eqep@0x48302180 {
				compatible = "ti,am33xx-eqep";
				reg = <0x48302180 0x80>;
				interrupt-parent = <0x1>;
				interrupts = <0x58>;
				ti,hwmods = "eqep1";
				status = "disabled";
				linux,phandle = <0x46>;
				phandle = <0x46>;
			};
		};

		epwmss@48304000 {
			compatible = "ti,am33xx-pwmss";
			reg = <0x48304000 0x10>;
			ti,hwmods = "epwmss2";
			#address-cells = <0x1>;
			#size-cells = <0x1>;
			status = "disabled";
			ranges = <0x48304100 0x48304100 0x80 0x48304180 0x48304180 0x80 0x48304200 0x48304200 0x80>;
			linux,phandle = <0x47>;
			phandle = <0x47>;

			ecap@48304100 {
				compatible = "ti,am33xx-ecap";
				#pwm-cells = <0x3>;
				reg = <0x48304100 0x80>;
				ti,hwmods = "ecap2";
				status = "disabled";
				linux,phandle = <0x48>;
				phandle = <0x48>;
			};

			ehrpwm@48304200 {
				compatible = "ti,am33xx-ehrpwm";
				#pwm-cells = <0x3>;
				reg = <0x48304200 0x80>;
				ti,hwmods = "ehrpwm2";
				status = "disabled";
				linux,phandle = <0x49>;
				phandle = <0x49>;
			};

			eqep@0x48304180 {
				compatible = "ti,am33xx-eqep";
				reg = <0x48304180 0x80>;
				interrupt-parent = <0x1>;
				interrupts = <0x59>;
				ti,hwmods = "eqep2";
				status = "disabled";
				linux,phandle = <0x4a>;
				phandle = <0x4a>;
			};
		};

		sham@53100000 {
			compatible = "ti,omap4-sham";
			ti,hwmods = "sham";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			reg = <0x53100000 0x200>;
			interrupt-parent = <0x1>;
			interrupts = <0x6d>;
			dmas = <0x8 0x24>;
			dma-names = "rx";
			status = "okay";
			linux,phandle = <0x4b>;
			phandle = <0x4b>;
		};

		aes@53500000 {
			compatible = "ti,omap4-aes";
			ti,hwmods = "aes";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			reg = <0x53500000 0xa0>;
			interrupt-parent = <0x1>;
			interrupts = <0x66>;
			dmas = <0x8 0x6 0x8 0x5>;
			dma-names = "tx", "rx";
			status = "okay";
			linux,phandle = <0x4c>;
			phandle = <0x4c>;
		};

		mcasp@48038000 {
			compatible = "ti,omap2-mcasp-audio";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			ti,hwmods = "mcasp0";
			reg = <0x48038000 0x2000>;
			interrupts = <0x50 0x51>;
			status = "disabled";
			asp-chan-q = <0x2>;
			tx-dma-offset = <0x46000000>;
			rx-dma-offset = <0x46000000>;
			dmas = <0x8 0x8 0x8 0x9>;
			dma-names = "tx", "rx";
			linux,phandle = <0x4d>;
			phandle = <0x4d>;
		};

		mcasp@4803C000 {
			compatible = "ti,omap2-mcasp-audio";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			ti,hwmods = "mcasp1";
			reg = <0x4803c000 0x2000>;
			interrupts = <0x52 0x53>;
			status = "disabled";
			asp-chan-q = <0x2>;
			tx-dma-offset = <0x46400000>;
			rx-dma-offset = <0x46400000>;
			dmas = <0x8 0xa 0x8 0xb>;
			dma-names = "tx", "rx";
			linux,phandle = <0x4e>;
			phandle = <0x4e>;
		};

		bandgap@44e10448 {
			compatible = "ti,am335x-bandgap";
			reg = <0x44e10448 0x8>;
		};

		gpio-leds {
			compatible = "gpio-leds";
			pinctrl-names = "default";
			pinctrl-0 = <0x3>;

			led0 {
				label = "beaglebone:green:usr0";
				gpios = <0x5 0x15 0x0>;
				linux,default-trigger = "heartbeat";
				default-state = "off";
			};

			led1 {
				label = "beaglebone:green:usr1";
				gpios = <0x5 0x16 0x0>;
				linux,default-trigger = "mmc0";
				default-state = "off";
			};

			led2 {
				label = "beaglebone:green:usr2";
				gpios = <0x5 0x17 0x0>;
				linux,default-trigger = "cpu0";
				default-state = "off";
			};

			led3 {
				label = "beaglebone:green:usr3";
				gpios = <0x5 0x18 0x0>;
				default-state = "off";
				linux,default-trigger = "mmc1";
			};
		};
	};

	bone_capemgr {
		compatible = "ti,bone-capemgr";
		status = "okay";
		eeprom = <0xe>;

		baseboardmaps {

			board@0 {
				board-name = "A335BONE";
				compatible-name = "ti,beaglebone";
				linux,phandle = <0x4f>;
				phandle = <0x4f>;
			};

			board@1 {
				board-name = "A335BNLT";
				compatible-name = "ti,beaglebone-black";
				linux,phandle = <0x50>;
				phandle = <0x50>;
			};
		};

		slots {

			slot@0 {
				eeprom = <0xf>;
			};

			slot@1 {
				eeprom = <0x10>;
			};

			slot@2 {
				eeprom = <0x11>;
			};

			slot@3 {
				eeprom = <0x12>;
			};

			slot@5 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "Bone-Geiger";
				version = "00A0";
				manufacturer = "Geiger Inc.";
				part-number = "BB-BONE-GEIGER";
			};

			slot@7 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "Bone-Nixie";
				version = "00A0";
				manufacturer = "Ranostay Industries";
				part-number = "BB-BONE-NIXIE";
			};

			slot@8 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "Bone-TFT";
				version = "00A0";
				manufacturer = "Adafruit";
				part-number = "BB-BONE-TFT-01";
			};

			slot@9 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "Bone-RTC";
				version = "00A0";
				manufacturer = "Adafruit";
				part-number = "BB-BONE-RTC-01";
			};

			slot@10 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "Bone-Hexy";
				version = "00A0";
				manufacturer = "Koen Kooi";
				part-number = "BB-BONE-HEXY-01";
			};

			slot@11 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "Bone-MRF24J40";
				version = "00A0";
				manufacturer = "Signal 11 Software";
				part-number = "BB-BONE-MRF24J40";
			};

			slot@12 {
				ti,cape-override;
				compatible = "kernel-command-line", "runtime";
				board-name = "BB-BONE-RS232";
				version = "00A0";
				manufacturer = "Adafruit";
				part-number = "BB-BONE-RS232-01";
			};

			slot@13 {
				compatible = "kernel-command-line", "runtime";
				board-name = "BB-BONE-GPS";
				version = "00A0";
				manufacturer = "Adafruit";
				part-number = "BB-BONE-GPS-01";
			};

			slot@100 {
				ti,cape-override;
				priority = <0x1>;
				compatible = "ti,beaglebone-black";
				board-name = "Bone-LT-eMMC-2G";
				version = "00A0";
				manufacturer = "Texas Instruments";
				part-number = "BB-BONE-EMMC-2G";
			};

			slot@101 {
				ti,cape-override;
				priority = <0x1>;
				compatible = "ti,beaglebone-black";
				board-name = "Bone-Black-HDMI";
				version = "00A0";
				manufacturer = "Texas Instruments";
				part-number = "BB-BONELT-HDMI";
			};

			slot@102 {
				ti,cape-override;
				priority = <0x2>;
				compatible = "ti,beaglebone-black";
				board-name = "Bone-Black-HDMIN";
				version = "00A0";
				manufacturer = "Texas Instruments";
				part-number = "BB-BONELT-HDMIN";
			};
		};

		capemaps {

			cape@0 {
				part-number = "BB-BONE-DVID-01";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-dvi-00A0.dtbo";
				};

				version@00A1 {
					version = "00A1", "01";
					dtbo = "cape-bone-dvi-00A1.dtbo";
				};

				version@00A2 {
					version = "00A2", "A2";
					dtbo = "cape-bone-dvi-00A2.dtbo";
				};

				version@00A3 {
					version = "00A3";
					dtbo = "cape-bone-dvi-00A2.dtbo";
				};
			};

			cape@1 {
				part-number = "BB-BONE-EMMC-2G";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-2g-emmc1.dtbo";
				};
			};

			cape@2 {
				part-number = "BB-BONE-GEIGER";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-geiger-00A0.dtbo";
				};
			};

			cape@3 {
				part-number = "BB-BONE-LCD3-01";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-lcd3-00A0.dtbo";
				};

				version@00A2 {
					version = "00A2";
					dtbo = "cape-bone-lcd3-00A2.dtbo";
				};
			};

			cape@4 {
				part-number = "BB-BONE-WTHR-01";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-weather-00A0.dtbo";
				};

				version@00B0 {
					version = "00B0";
					dtbo = "cape-bone-weather-00B0.dtbo";
				};
			};

			cape@5 {
				part-number = "BB-BONELT-HDMI";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-boneblack-hdmi-00A0.dtbo";
				};
			};

			cape@6 {
				part-number = "BB-BONE-NIXIE";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-nixie-00A0.dtbo";
				};
			};

			cape@7 {
				part-number = "BB-BONE-TFT-01";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-adafruit-lcd-00A0.dtbo";
				};
			};

			cape@8 {
				part-number = "BB-BONE-RTC-01";

				version@00A0 {
					version = "00A0";
					dtbo = "BB-BONE-RTC-00A0.dtbo";
				};
			};

			cape@9 {
				part-number = "BB-BONE-HEXY-01";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-hexy-00A0.dtbo";
				};
			};

			cape@10 {
				part-number = "BB-BONE-MRF24J40";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-mrf24j40-00A0.dtbo";
				};
			};

			cape@11 {
				part-number = "BB-BONE-EXPTEST";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-bone-exptest-00A0.dtbo";
				};
			};

			cape@12 {
				part-number = "BB-BONE-RS232-01";

				version@00A0 {
					version = "00A0";
					dtbo = "BB-BONE-RS232-00A0.dtbo";
				};
			};

			cape@13 {
				part-number = "BB-BONE-GPS-01";

				version@00A0 {
					version = "00A0";
					dtbo = "BB-BONE-GPS-00A0.dtbo";
				};
			};

			cape@14 {
				part-number = "BB-BONELT-HDMIN";

				version@00A0 {
					version = "00A0";
					dtbo = "cape-boneblack-hdmin-00A0.dtbo";
				};
			};

			cape@15 {
				part-number = "2191";

				version@R2 {
					version = "R2";
					dtbo = "cape-bebopr-R2.dtbo";
				};
			};

			cape@16 {
				part-number = "BB-BONE-LOGIBONE";

				version@00R1 {
					version = "00R1";
					dtbo = "BB-BONE-LOGIBONE-00R1.dtbo";
				};
			};
		};
	};

	fixedregulator@0 {
		compatible = "regulator-fixed";
		regulator-name = "vmmcsd_fixed";
		regulator-min-microvolt = <0x325aa0>;
		regulator-max-microvolt = <0x325aa0>;
		linux,phandle = <0xb>;
		phandle = <0xb>;
	};

	__symbols__ {
		cpu = "/cpus/cpu@0";
		am33xx_pinmux = "/pinmux@44e10800";
		userled_pins = "/pinmux@44e10800/pinmux_userled_pins";
		i2c0_pins = "/pinmux@44e10800/pinmux_i2c0_pins";
		i2c2_pins = "/pinmux@44e10800/pinmux_i2c2_pins";
		mmc1_pins = "/pinmux@44e10800/pinmux_mmc1_pins";
		rstctl_pins = "/pinmux@44e10800/pinmux_rstctl_pins";
		ocp = "/ocp";
		intc = "/ocp/interrupt-controller@48200000";
		edma = "/ocp/edma@49000000";
		gpio1 = "/ocp/gpio@44e07000";
		gpio2 = "/ocp/gpio@4804c000";
		gpio3 = "/ocp/gpio@481ac000";
		gpio4 = "/ocp/gpio@481ae000";
		rstctl = "/ocp/rstctl@0";
		uart1 = "/ocp/serial@44e09000";
		uart2 = "/ocp/serial@48022000";
		uart3 = "/ocp/serial@48024000";
		uart4 = "/ocp/serial@481a6000";
		uart5 = "/ocp/serial@481a8000";
		uart6 = "/ocp/serial@481aa000";
		i2c0 = "/ocp/i2c@44e0b000";
		tps = "/ocp/i2c@44e0b000/tps@24";
		dcdc1_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@0";
		dcdc2_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@1";
		dcdc3_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@2";
		ldo1_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@3";
		ldo2_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@4";
		ldo3_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@5";
		ldo4_reg = "/ocp/i2c@44e0b000/tps@24/regulators/regulator@6";
		baseboard_eeprom = "/ocp/i2c@44e0b000/baseboard_eeprom@50";
		i2c1 = "/ocp/i2c@4802a000";
		i2c2 = "/ocp/i2c@4819c000";
		cape_eeprom0 = "/ocp/i2c@4819c000/cape_eeprom0@54";
		cape_eeprom1 = "/ocp/i2c@4819c000/cape_eeprom1@55";
		cape_eeprom2 = "/ocp/i2c@4819c000/cape_eeprom2@56";
		cape_eeprom3 = "/ocp/i2c@4819c000/cape_eeprom3@57";
		mmc1 = "/ocp/mmc@48060000";
		mmc2 = "/ocp/mmc@481d8000";
		mmc3 = "/ocp/mmc@47810000";
		wdt2 = "/ocp/wdt@44e35000";
		dcan0 = "/ocp/d_can@481cc000";
		dcan1 = "/ocp/d_can@481d0000";
		timer1 = "/ocp/timer@44e31000";
		timer2 = "/ocp/timer@48040000";
		timer3 = "/ocp/timer@48042000";
		timer4 = "/ocp/timer@48044000";
		timer5 = "/ocp/timer@48046000";
		timer6 = "/ocp/timer@48048000";
		timer7 = "/ocp/timer@4804a000";
		pruss = "/ocp/pruss@4a300000";
		spi0 = "/ocp/spi@48030000";
		spi1 = "/ocp/spi@481a0000";
		gpmc = "/ocp/gpmc@50000000";
		usb_otg_hs = "/ocp/usb@47400000";
		mac = "/ocp/ethernet@4a100000";
		davinci_mdio = "/ocp/ethernet@4a100000/mdio@4a101000";
		cpsw_emac0 = "/ocp/ethernet@4a100000/slave@4a100200";
		cpsw_emac1 = "/ocp/ethernet@4a100000/slave@4a100300";
		tscadc = "/ocp/tscadc@44e0d000";
		lcdc = "/ocp/lcdc@4830e000";
		epwmss0 = "/ocp/epwmss@48300000";
		ecap0 = "/ocp/epwmss@48300000/ecap@48300100";
		ehrpwm0 = "/ocp/epwmss@48300000/ehrpwm@48300200";
		eqep0 = "/ocp/epwmss@48300000/eqep@0x48300180";
		epwmss1 = "/ocp/epwmss@48302000";
		ecap1 = "/ocp/epwmss@48302000/ecap@48302100";
		ehrpwm1 = "/ocp/epwmss@48302000/ehrpwm@48302200";
		eqep1 = "/ocp/epwmss@48302000/eqep@0x48302180";
		epwmss2 = "/ocp/epwmss@48304000";
		ecap2 = "/ocp/epwmss@48304000/ecap@48304100";
		ehrpwm2 = "/ocp/epwmss@48304000/ehrpwm@48304200";
		eqep2 = "/ocp/epwmss@48304000/eqep@0x48304180";
		sham = "/ocp/sham@53100000";
		aes = "/ocp/aes@53500000";
		mcasp0 = "/ocp/mcasp@48038000";
		mcasp1 = "/ocp/mcasp@4803C000";
		baseboard_beaglebone = "/bone_capemgr/baseboardmaps/board@0";
		baseboard_beaglebone_black = "/bone_capemgr/baseboardmaps/board@1";
		vmmcsd_fixed = "/fixedregulator@0";
	};
};

7 thoughts on “[BeagleBone Black] Enable All UART Ports at Boot

  1. Hi
    When I execute this command
    $ dtc -I dtb -O dts -o am335x-boneblack.dts /home/debian/am335x-boneblack.dtb

    It shows me this error
    “FATAL ERROR: Couldn’t open “/home/debian/am335x-boneblack.dtb”: No such file or directory”

  2. Thanks for the great blog. I attempted to modify the dts file myself. I found that the pin addresses for uart2 and uart4 were both being used by other devices. I disabled the sha0_ck (for serial2) and compiled the file but didn’t see any new tty messages in dmesg. I then copied the dts file in your blog and it compiled with errors. I tried booting it anyway and the boot process hung when starting the kernel.

    Anyway, this is just an fyi. I’ll try again some other time.

    Cheers!

    Relevant erros when compiling the dts file:

    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /ocp/epwmss@48300000/eqep@0x48300180 unit name should not have leading “0x”
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /ocp/epwmss@48302000/eqep@0x48302180 unit name should not have leading “0x”
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /ocp/epwmss@48304000/eqep@0x48304180 unit name should not have leading “0x”
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@0/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@0/version@00A1 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@0/version@00A2 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@0/version@00A3 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@1/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@2/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@3/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@3/version@00A2 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@4/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@4/version@00B0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@5/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@6/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@7/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@8/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@9/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@10/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@11/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@12/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@13/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@14/version@00A0 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (unit_address_format): Node /bone_capemgr/capemaps/cape@16/version@00R1 unit name should not have leading 0s
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/sgx@0x56000000 simple-bus unit address format error, expected “56000000”
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/rstctl@0 missing or empty reg/ranges property
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/mmc@48060000 missing or empty reg/ranges property
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/mmc@481d8000 missing or empty reg/ranges property
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/mmc@47810000 missing or empty reg/ranges property
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/nop-phy@0 missing or empty reg/ranges property
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/nop-phy@1 missing or empty reg/ranges property
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/mcasp@4803C000 simple-bus unit address format error, expected “4803c000”
    /boot/dtbsam335x-boneblack.dtb: Warning (simple_bus_reg): Node /ocp/gpio-leds missing or empty reg/ranges property

    Kernel:
    Linux version 4.19.10-1-ARCH (builduser@leming) (gcc version 8.2.0 (GCC)) #1 PREEMPT Thu Dec 20 02:02:23 UTC 2018

    Boot output:

    U-Boot SPL 2017.07-1 (Sep 02 2017 – 21:04:29)
    Trying to boot from MMC1

    U-Boot 2017.07-1 (Sep 02 2017 – 21:04:29 +0000) Arch Linux ARM

    CPU : AM335X-GP rev 2.1
    I2C: ready
    DRAM: 512 MiB
    No match for driver ‘omap_hsmmc’
    No match for driver ‘omap_hsmmc’
    Some drivers were not found
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    Using default environment

    not set. Validating first E-fuse MAC
    Net: cpsw, usb_ether
    Press SPACE to abort autoboot in 2 seconds
    gpio: pin 54 (gpio 54) value is 0
    gpio: pin 55 (gpio 55) value is 0
    gpio: pin 56 (gpio 56) value is 0
    gpio: pin 53 (gpio 53) value is 1
    switch to partitions #0, OK
    mmc0 is current device
    SD/MMC found on device 0
    ** File not found boot.scr **
    ** Unrecognized filesystem type **
    switch to partitions #0, OK
    mmc0 is current device
    Scanning mmc 0:1…
    Found U-Boot script /boot/boot.scr
    886 bytes read in 25 ms (34.2 KiB/s)
    ## Executing script at 80000000
    5574688 bytes read in 376 ms (14.1 MiB/s)
    gpio: pin 54 (gpio 54) value is 1
    fdt: am335x-boneblack.dtb
    26518 bytes read in 51 ms (506.8 KiB/s)
    gpio: pin 55 (gpio 55) value is 1
    5161207 bytes read in 343 ms (14.3 MiB/s)
    gpio: pin 56 (gpio 56) value is 1
    ## Flattened Device Tree blob at 88000000
    Booting using the fdt blob at 0x88000000
    Loading Ramdisk to 8fb13000, end 8ffff0f7 … OK
    Loading Device Tree to 8fb09000, end 8fb12795 … OK

    Starting kernel …

  3. FSR=00001008, FAR=fe800000, spsr=60000093
    r0 =c0610d40, r1 =fe800000, r2 =000004b0, r3 =00000000
    r4 =c266b400, r5 =c2512940, r6 =00000006, r7 =c075d350
    r8 =c075d100, r9 =c020478c, r10=c266b450, r11=c090ad78
    r12=c0612064, ssp=c090ad58, slr=c04c8584, pc =c04c859c

    panic: Fatal abort
    Uptime: 1s

Leave a comment